package com.hui.platform.mybatisplusgenerator;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.hui.platform.mybatisplusgenerator.devops.ModuleInfoEnum;
import com.hui.platform.mybatisplusgenerator.devops.constant.GenFileTypeEnum;
import com.hui.platform.mybatisplusgenerator.devops.generator.CodeGenerator;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 代码生成运行类
 *
 * @author Peng
 * @date 2019/10/24
 */
public class CodeGeneratorRun {

    /**
     * Main方法
     *
     * @param args ars
     */
    public static void main(String[] args) {

        String mode = scanner("模式：1:创建模块  2:更新模块");

        switch (mode) {
            case "1":
                createModule();
                break;
            case "2":
                updateModule();
                break;
            default:
                System.err.println("非法输入");
        }

    }

    //-----------------------------------------------------------------------


    /**
     * 操作的模块（输入源）
     */
    private static ModuleInfoEnum module = ModuleInfoEnum.TEST_MODULE;

    private static final String AUTHOR = module.getAuthor();
    private static final String MODULE_NAME = module.getModuleName();
    private static final String MODULE_DESC = module.getModuleDesc();
    private static final String[] INCLUDE_TABLES = module.getIncludeTables();

    //-----------生成位置----------

    private static final String PROJECT_PATH = ModuleInfoEnum.PROJECT_PATH;
    private static final String MODULE_PARENT = ModuleInfoEnum.MODULE_PARENT;

    //-----------操作方法----------

    /**
     * 初始化模块-新增表
     */
    private static void createModule() {
        CodeGenerator generator = new CodeGenerator();
        //设置项目基础路径
        generator.setProjectPath(PROJECT_PATH);
        //设置模块父包名
        generator.setModuleParent(MODULE_PARENT);
        //关闭部分文件的生成
        GenFileTypeEnum.ENTITY_VO_FILE.setEnabled(false);
        GenFileTypeEnum.MYBATIS_CONFIG_FILE.setEnabled(false);
        generator
                .setAuthor(AUTHOR)
                .setModuleName(MODULE_NAME)
                .setModuleDesc(MODULE_DESC)
                .setIncludeTables(INCLUDE_TABLES);
        //执行生成
        generator.build();
    }

    /**
     * 更新表字段
     */
    private static void updateModule() {
        CodeGenerator generator = new CodeGenerator();
        //设置项目基础路径
        generator.setProjectPath(PROJECT_PATH);
        //设置模块包名
        generator.setModuleParent(MODULE_PARENT);
        //开启文件覆盖
        generator.setFileOverride(true);
        //设置全部生成文件关闭
        Arrays.stream(GenFileTypeEnum.values()).forEach(t -> t.setEnabled(false));
        //选择需要覆盖的文件类型
        GenFileTypeEnum.ENTITY_DO_FILE.setEnabled(true);
        generator
                .setAuthor(AUTHOR)
                .setModuleName(MODULE_NAME)
                .setModuleDesc(MODULE_DESC)
                //.setIncludeTables(new String[]{"tb_goods"}); //指定的单表用于字段更新,注意:该表需要再这个模块中
                .setIncludeTables(INCLUDE_TABLES);
        //执行生成
        generator.build();
    }

    //-----------------------------------------------------------------------
    /**
     * 读取控制台内容
     */
    private static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + "：");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "！");
    }
}
